#include <iostream>
#include <string>
#include <cstdio>
#include <string.h>
#include <errno.h>
#include <cstdio>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main()
{
    pid_t id = fork();
    if(id<0)
    {
        printf("errno: %d,errstring: %s\n",errno,strerror(errno));
        return errno;
    }
    else if(id == 0)
    {
        int cnt = 5;
        while(5)
        {
            printf("子进程运行中,pid: %d\n",getpid());
            sleep(1);
            cnt--;
        }
        exit(1);
    }
    else
    {
        sleep(10);
        int status = 0;
        pid_t rid = waitpid(id,&status,0);// ==wait(nullptr)
        if(rid > 0)
        {
            if(WIFEXITED(status))//如果成功退出
            {
                printf("wait sub processon,rid: %d,status: %d\n",rid,WEXITSTATUS(status));
            }
            else//异常退出
            {
                printf("child process quit error!\n");
            }
        }
        else
        {
            perror("waitpid");
        }
        while (true)
        {
            printf("我是父进程,pid: %d\n",getpid());
            sleep(1);
        }
        
    }









    // printf("进程运行结束！");
    // sleep(2);
    // _exit(23);
    // sleep(2);


    // for(int i = 0;i<200;i++)
    // {
    //     std::cout<<"code: "<<i<<", errstring: "<<strerror(i)<<std::endl;
    // }
    // printf("before: errno: %d,errstring: %s\n", errno, strerror(errno));

    // FILE *fp = fopen("./log.txt", "r");
    // if (fp == nullptr)
    // {
    //     printf("after: errno: %d,errstring: %s\n", errno, strerror(errno));
    //     return errno;
    // }
    // std::cout << "hello bit" << std::endl;
    return 0;
}